Prevod Dositej Cvetkovic
209-211 8.10. Sveukupno Da obnovimo: ovaj program rešava abecedne zagonetke grubom silom, tj. Iscrpnom pretragom svih mogućih rešenja. Da biste to uradili, to ... 1. Pronalazi sva slova u slagalici pomoću funkcije re.findall () 2. Pronađite sva jedinstvena slova u slagalici sa skupovima i funkcijom set () 3. Proverite da li postoji više od 10 jedinstvenih slova (što znači da je zagonetka definitivno nerešiva) sa assert izjavom 4. Pretvara slova u njihove ASCII ekvivalente s generacijskim objektom 5. Izračunava sva moguća rešenja pomoću funkcije itertools.permutations () 6. Pretvara svako moguće rešenje u izraz Pajton metodom stringa translate () 7. Testira svako moguće rešenje ocenjujući izraz Pajton funkcijom eval () 8. Vraća prvo rešenje koje vraća True … U samo 14 redova koda. 8.11. DODATNA LITERATURA • itertools modul • itertools - Iterator funkcije za efikasnost petlje • Pogledajte "Rai Easi AI sa Pithon-om" Raimonda Hettingera na "PiCon 2009" • Recept 576615: Alphametics odgonetač, originalni abecedni odgonetač Raimond Hettinger-a za Pithon 2 • Više recepata Raimonda Hettingera u skladištu ActiveState Code • Abeceda na Vikipediji • Alphametics Indeks, uključujući mnoštvo zagonetki i generator kojim ćete napraviti svoju Veliko hvala Raimondu Hettingeru što je pristao da dodeli svoj kod kako bih ga mogao prebaciti na Pajton 3 i koristiti ona je osnova za ovo poglavlje. 'POGLAVLJE 9. TESTIRANJE JEDINICE' ' ' ❝ Certitude is not the test of certainty. We have been cocksure of many things that were not so. ❞ — Oliver Wendell Holmes, Jr. 9.1. (NE) ZARONITI U ovom poglavlju ćete napisati i otkloniti greške skupa funkcija uslužnih programa za pretvaranje u Rimske brojeve i obrnuto. Videli ste mehaniku konstruisanja i proveravanja rimskih brojeva u „Studiji slučaja: rimski brojevi “. Sada koraknite unazad i razmislite šta je potrebno da biste to proširili na dvosmerni uslužni program. Pravila za rimske brojeve dovode do brojnih zanimljivih opažanja: 1. Postoji samo jedan ispravan način predstavljanja određenog broja kao rimskog broja. 2. Isto je tačno i obrnuto: ako je niz znakova validan rimski broj, to predstavlja samo jedan broj (to jest, to se može tumačiti samo na jedan način). 3. Postoji ograničen raspon brojeva koji se mogu izraziti rimskim brojevima, tačnije od 1 do 3999. Rimljani su imali nekoliko načina izražavanja većih brojeva, na primer, crta preko broja značila je umnožavanje sa 1000. Za potrebe ovog poglavlja, upotrebljavaju se brojevi koji se kreću od 1 do 3999. 4. Nema načina za predstavljanje 0 rimskim brojevima. 5. Nema načina za predstavljanje negativnih brojeva rimskim brojevima. 6. Nema načina da se razlomci ili ne celi brojevi predstavljaju rimskim brojevima. Počnimo s mapiranjem onoga što bi roman.py modul trebao raditi. Imaće dve glavne funkcije, to_roman () i from_roman (). Funkcija to_roman () trebala bi uzeti celi broj od 1 do 3999 i vratiti rimski broj kao niz karaktera... Stani tu. Sada da napravimo nešto pomalo neočekivano: napišite test slučaj koji proverava da li to_roman () funkcija radi ono što želite. Pročitali ste dobro: napisaćete kod koji testira kod koji još niste napisali. To se naziva test-driven razvoj, ili TDD. Skup dve funkcije konverzije - to_roman (), i kasnije from_roman () - može se napisati i testirati kao jedinica, odvojeno od bilo kojeg većeg programa koji ih uvozi. Pajton ima okvir za testiranje jedinice, odgovarajuće imenovan unittest modul. Jedinstveno testiranje važan je deo sveukupne strategije razvoja usmerenog na testiranje. Ako pišete testove jedinica, važno je da ih napišete rano i da ih ažurirate kako se menjaju kod i zahtevi. Mnogi ljudi predlažu pisanje testova pre nego što se napiše kod koji se testira, a to je stil koji ću demonstrirati u ovom poglavlju. Ali testovi jedinica su korisni bez obzira kada ih pišete. • Pre pisanja koda, testovi jedinice za pisanje vas prisiljavaju da detaljno objasnite svoje zahteve. • Dok pišete kod, testovi jedinica vas sprečavaju od prekomernog kodiranja. Kada svi testovi prođu, funkcija je kompletna. • Kad rekonstruišete kod, mogu vam pomoći i ukažu da se nova verzija ponaša na isti način kao i stara verzija. • Kada održavate kod, testiranje će vam pomoći da pokrijete guzicu kada neko dođe da viče da je vaša poslednja promena pokvarila njihov stari kod. ("Ali gospodine, svi testovi jedinica su prošli kada sam ga pregledao ...") • Kada pišete kod u timu, sveobuhvatni testni paket dramatično umanjuje šanse za to da će vaš kod slomiti tuđi kod, jer prvo možete da pokrenete njihove jedinice testova. (Video sam ovakve stvaro kod tzv. code sprint-ova. Tim razbija zadatak, svako uzima specifikacije za svoj zadatak, piše testove jedinica za to, a zatim deli svoje testove sa ostatkom tima. Na taj način, niko ne ode predaleko u razvijanje koda koji se ne slaže dobro sa drugima.) ' '